Matrizen sind das zentrale Datenobjekt in Matlab:
A = [1 2; 3 4];
B = [5 6; 7 8];
C = A + B % Addition
D = A * B % Matrixmultiplikation (!)
E = A .* B % Elementweise Multiplikation
Wichtig: * ist die mathematische Matrixmultiplikation!
A = [1 2 3; 4 5 6]
Punkt-Transposition: Reines Vertauschen von Zeilen/Spalten
A.' % [1 4; 2 5; 3 6]
Komplex-konjugierte Transposition: Für komplexe Matrizen
A' % Transponiert UND konjugiert komplex
Für reelle Matrizen sind
.'und'identisch.
Ein lineares Gleichungssystem ist eine Matrix-Vektor-Multiplikation:
A = [-1 1;
1 1];
x = [1.5; 3.5];
b = A * x % b = [2; 5]
A = [1 2; 3 4];
det(A) % Determinante
inv(A) % Inverse Matrix
rank(A) % Rang
cond(A) % Konditionszahl
Diese Funktionen brauchen wir, um Gleichungssysteme zu verstehen!
Allgemeine Form:
Gleichungen für Unbekannte
Quadratisch: (gleich viele Gleichungen wie Unbekannte)
A = [2 1; 1 3]; % 2×2
Überbestimmt: (mehr Gleichungen als Unbekannte)
A = [2 1; 1 3; -1 2]; % 3×2
Unterbestimmt: (weniger Gleichungen als Unbekannte)
A = [2 1 3]; % 1×3
Der Rang ist die Anzahl linear unabhängiger Zeilen/Spalten:
A = [1 2 3;
2 4 6]; % Zeile 2 = 2·Zeile 1
rank(A) % 1 (nicht 2!)
Bedeutung: Gibt an, wie viele "echte" Gleichungen vorhanden sind.
Welchen Rang haben diese Matrizen? Überlegen Sie erst, dann prüfen mit rank():
A1 = [1 2 3; 2 4 6; 1 1 1];
A2 = [1 0 0; 0 1 0; 0 0 1];
A3 = [1 2; 3 6; 2 4];
2 Gleichungen, 2 Unbekannte: Jede Gleichung = Gerade
Lösung = Schnittpunkt der Geraden
3 Gleichungen, 3 Unbekannte: Jede Gleichung = Ebene
Lösung = Schnittpunkt der Ebenen
Für quadratische Systeme ():
Fall 1: und
→ Genau eine Lösung für jedes
Fall 2: oder (Matrix singulär)
→ Keine Lösung ODER unendlich viele Lösungen
A = [-1 1;
-2 2]; % Zeile 2 = 2·Zeile 1
det(A) % 0
rank(A) % 1
Überbestimmt ():
Unterbestimmt ():
Die Konditionszahl misst, wie empfindlich die Lösung auf Störungen reagiert:
A = [1 1;
1 1.0001];
cond(A) % 40000 (schlecht konditioniert!)
Faustregel:
Bedeutung: Bei können 6 Dezimalstellen im Ergebnis falsch sein!
% Singulär: det = 0, unendliche Konditionszahl
A1 = [1 2; 2 4];
det(A1) % 0
cond(A1) % Inf
% Schlecht konditioniert: det ≠ 0, aber sehr klein
A2 = [1 2; 2 4.001];
det(A2) % 0.001
cond(A2) % 16004
Singuläre Matrix: Keine eindeutige Lösung (mathematisches Problem)
Schlecht konditioniert: Lösung existiert, aber numerisch instabil
Wenn exakt lösbar ist:
A = [2 1; 1 3];
b = [5; 6];
x = ??? % Gesucht!
A * x % Ergebnis ist EXAKT b
Probe:
Überbestimmtes System – 3 Geraden haben keinen gemeinsamen Schnittpunkt:
A = [-1 1;
1 1;
-0.4 1];
b = [0; 2; 0.5];
Keine Lösung erfüllt alle 3 Gleichungen gleichzeitig!
Was tun?
Idee: Finde , das den Fehler minimiert:
x = ??? % Bestmögliche Lösung
residuum = A * x - b % ≠ 0, aber minimal!
norm(residuum) % So klein wie möglich
Least-Squares = "Kleinste Quadrate" = Minimiere Summe der quadrierten Fehler
| System | Bedingung | Lösung |
|---|---|---|
| Quadratisch | Exakt | |
| Quadratisch | Keine oder viele | |
| Überbestimmt | im Spaltenraum | Exakt (selten!) |
| Überbestimmt | Sonst | Least-Squares |
| Unterbestimmt | - | viele (min. Norm) |
\\Der universelle Löser für lineare Gleichungssysteme:
A = [-1 1;
1 1];
b = [2; 5];
x = A \ b % Lösung: [1.5; 3.5]
\ vs. / – Linksdivision vs. RechtsdivisionLinksdivision \: Löst
x = A \ b % "A nach links teilen"
Rechtsdivision /: Löst
x = b / A % "A nach rechts teilen"
% Äquivalent zu: x = (A' \ b')'
In der Praxis: Fast immer \ verwenden! / nur für spezielle Fälle (z.B. bei transponierten Systemen).
\ genau?Matlab analysiert und wählt den optimalen Algorithmus:
Was macht \? |
|
|---|---|
| Quadratisch, regulär (, ) | Exakte Lösung (LU-Zerlegung) |
| Quadratisch, singulär (, ) | Warnung! Pseudo-Inverse |
| Überbestimmt () | Least-Squares (QR-Zerlegung) |
| Unterbestimmt () | Lösung mit Nicht-Null-Elementen |
Matlab wählt automatisch – aber Sie müssen das Ergebnis überprüfen!
A = [-1 1;
1 1];
b = [2; 5];
x = A \ b % [1.5; 3.5]
% Probe:
norm(A*x - b) % 0 → Exakte Lösung!
A = [-1 1;
1 1;
-0.4 1];
b = [0; 2; 0.5];
x = A \ b
% Probe:
A * x % ≠ b!
norm(A*x - b) % ≠ 0 → Keine exakte Lösung!
Matlab gibt automatisch Least-Squares-Lösung!
Immer Residuum berechnen:
x = A \ b;
r = A*x - b;
fehler = norm(r);
if fehler < 1e-10
disp('Exakte Lösung gefunden')
else
disp('Least-Squares-Lösung (keine exakte Lösung)')
fprintf('Fehler: %.3e\n', fehler)
end
A = [1 2;
2 4]; % Zeile 2 = 2·Zeile 1
b = [3; 4];
det(A) % 0 (singulär!)
x = A \ b % Warnung!
Ausgabe:
Warning: Matrix is singular to working precision.
x =
Inf
-Inf
Bei Singularität: Matlab warnt und gibt unsinnige Ergebnisse!
A = [1 2;
2 3.9999999999999995]; % Fast parallel!
det(A) % -8.88e-16 (fast 0!)
x = A \ b
Ausgabe:
Warning: Matrix is close to singular or badly scaled.
Results may be inaccurate. RCOND = 1.233581e-17.
x =
1.0e+15 *
-9.0072
4.5036
Bei schlechter Konditionierung: Kleine Fehler → riesige Ergebnisse!
inv (nicht empfohlen!)A = [-1 1;
1 1];
b = [2; 5];
% Mit inv (funktioniert, aber ineffizient)
IA = inv(A);
x = IA * b % [1.5; 3.5]
% Probe
A * x % [2; 5] ✓
A * IA % [1 0; 0 1] = Einheitsmatrix
det(A) * det(IA) % -2 * -0.5 = 1
Aber: Für große Matrizen langsam und ungenau!
Lineare Gleichungssysteme:
Lösung mit \:
norm(A*x - b) → 0 bedeutet exaktinv(A)*b für LGS verwenden!Matrixfunktionen:
det(A), rank(A), cond(A) – Analyseinv(A) – okay für andere Zwecke, nicht für LGS